package com.foreknow.demo16;

/**
 * @author shkstart
 * @create 2021-08-10 16:22
 */

/**
 * ①如何插入一条新数据
 * ②如何寻找某一条特定数据
 * ③如何删除某一条特定的数据
 * ④如何迭代各个数据项目进行显示或者其他操作
 */
public class ArrayDataStru {
    //定义一个数组
    private int[] intArray;
    private int elems;      //表示数组实际有效长度
    private int maxLength;  //数组最大长度


    //构造器长度为50个元素的数组
    public ArrayDataStru() {
        elems = 0;
        maxLength = 50;
        intArray = new int[maxLength];
    }


    public ArrayDataStru(int maxLength) {
        elems = 0;
        this.maxLength = maxLength;
        intArray = new int[maxLength];
    }

    //获取数组有效的长度
    public int getSize() {
        return elems;
    }


    //数组进行遍历   来显示元素
    public void display() {
        for (int i = 0; i < elems; i++) {
            System.out.print(intArray[i] + " ");
        }
        System.out.println();

    }

    /**
     * 添加元素
     *
     * @param value 要添加的值
     * @return true 添加成功   否则false
     */
    public boolean add(int value) {
        if (elems == maxLength) {
            return false;
        } else {
            intArray[elems] = value;
            elems++;
            return true;
        }
    }


    /**
     * 根据下标获取元素
     *
     * @param i 下标为i
     * @return 元素的值
     */
    public int get(int i) {
        if (i < 0 || i > elems) {
            System.out.println("数组下标越界");
        }
        return intArray[i];
    }

    /**
     * 查找元素
     * @param search
     * @return  如果查找到元素就要返回下标值   如果找不到返回-1
     */
    public int find(int search){

        for (int i = 0; i < elems; i++) {
            if(search==intArray[i]){
                return i;
            }
        }

        return -1;
    }


    /**
     * 修改元素
     * @param oldvalue  原值
     * @param newvalue  新值
     * @return  boolean
     */
    public boolean update(int oldvalue,int newvalue){
        // 先调用find方法找到目标的下标
        int index = find(oldvalue);
        if (index==-1){
            System.out.println("修改数据不存在");
            return false;
        }else {
            intArray[index]=newvalue;
        }
        return false;
    }

    /**
     * 删除元素
     * @param value  根据具体的值删除元素
     * @return  boolean
     */
    public boolean del(int value){
        int index = find(value);
        if(index==-1){
            System.out.println("删除的元素不存在");
            return false;
        }else {
            for (int i = index ; i <elems-1 ; i++) {
                intArray[i]=intArray[i+1];
            }
            elems--;
            return true;
        }

    }


    public static void main(String[] args) {
        int[] array = new int[]{1, 2, 3, 4, 5, 6};
        int[] array2 = new int[5];
        int[] array3 = {1, 2, 3, 4, 5, 6};

        ArrayDataStru dataStru=new ArrayDataStru();
        dataStru.add(1);
        dataStru.add(2);
        dataStru.add(3);
        dataStru.add(4);
        dataStru.add(5);
        dataStru.display();

        int i = dataStru.get(0);
        System.out.println(i);

        dataStru.del(3);
        dataStru.display();

    }
}
